МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
КАФЕДРА ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ
Звіт
До лабораторної роботи № 4
На тему: “ Робота з колекціями та масивами ”
З дисципліни : "Конструювання програмного забезпечення"
Мета: Навчитися прицювати з колекціями System.Collections.Generic та масивами
Завдання:
На цій лабораторній необхідно реалізувати
Кілька класів, що реалізують 4 взаємозв'язані об'єкти, які є у базі даних, та конструктор до них.
"фіктивний об'єкт" - базу даних, який буде повертати список цих об'єктів (Щонайменше 4 для об'єктів які містять більше 9 полів, щонайменше 8 для решти)
Вивести на консоль вміст усіх об'єктів перевизначивши метод ToStringО
Відповідно до завдання реалізуйте декілька зв'язаних класів.
Розробити "фіктивний об'єкт" (Mock-object), що симулює табличні дані.
Перевизначити метод ToStringО. Використовуючи команду String.Format
Вивести на консоль усі дані використовуючи цикл foreach.
Розробити і заповнити структуру, у якій за ключем можна витягнути окремий клас, або їх список.
Dictionary<Guid productID, Product> - хеш-таблиця продуктів.
Dictionary<Guid categorylD, List<Product>> - хеш-таблиця категорій продуктів. За ключем категорії отримати список продуктів цієї категорії.
Відсортувати за якимось критерієм використовуючи шаблон IComparer.
Конвертувати списки в масив. Відсортувати масив за ім'ям. Відсортувати масив за кількістю елементів у зв'язаному з ним масиві, наприклад, відсортувати масив категорій за кількістю продуктів у них.
Код програми
Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace lab4
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private static Dictionary<int, Room> RoomDictionary = new Dictionary<int, Room>();
private static Dictionary<int, List<Habitant>> HabitantDictionary = new Dictionary<int, List<Habitant>>();
List<LogIn> LogList;
List<Room> RoomList;
List<Account> AccountList;
List<Habitant> HabitantList;
private void button1_Click(object sender, EventArgs e)
{
Test DataBase = new Test();
LogList = DataBase.LogIn;
RoomList = DataBase.Room;
AccountList = DataBase.Account;
HabitantList = DataBase.Habitant;
OutData.Text = "Інформація про Жителів : \r\n";
foreach (Habitant hab in HabitantList)
OutData.Text = OutData.Text + hab.ToString();
OutData.Text = OutData.Text + "\r\nІнформація про рахунки : \r\n";
foreach (Account acc in AccountList)
OutData.Text = OutData.Text + acc.ToString();
OutData.Text = OutData.Text + "\r\nІнформація про кімнати: \r\n";
foreach (Room r in RoomList)
OutData.Text = OutData.Text + r.ToString();
OutData.Text = OutData.Text + "\r\nІнформація про логіни: \r\n";
foreach (LogIn log in LogList)
OutData.Text = OutData.Text + log.ToString();
//Запoвнення словників
RoomDictionary.Clear();
foreach (Room r in RoomList)
RoomDictionary.Add(r.RoomId, r);
HabitantDictionary.Clear();
foreach (Habitant hab in HabitantList)
if (HabitantDictionary.ContainsKey(hab.RoomId))
HabitantDictionary[hab.RoomId].Add(hab);
else
{
List<Habitant> tmpList = new List<Habitant>();
tmpList.Add(hab);
HabitantDictionary.Add(hab.RoomId, tmpList);
}
foreach (Room r in RoomList)
UsersComboBox.Items.Add(r.RoomId);
tabControl1.Enabled = true;
}
private void UserInformation_Click(object sender, EventArgs e)
{
if (UsersComboBox.Text == "")
{
Consol1.Text = "Не вибрано ID кімнати";
return;
}
Consol1.Text = string.Format("Інформація про кімнату з ID - {0:D3}\r\n\r\n", UsersComboBox.Text);
Consol1.Text = Consol1.Text + RoomDictionary[int.Parse(UsersComboBox.Text)].ToString();
Consol1.Text = Consol1.Text + string.Format("Там проживають:\r\n\r\n",
HabitantDictionary[int.Parse(UsersComboBox.Text)].Count);
foreach (Habitant hab in HabitantDictionary[int.Parse(UsersComboBox.Text)])
Consol1.Text = Consol1.Text + hab.ToString();
}
private class UserNameComparer : IComparer<Habitant>
{
public int Compare(Habitant x, Habitant y)
{
return string.Compare(x.Name, y.Name);
}
}
private class UserTelephonComparer : IComparer<Habitant>
{
public int Compare(Habitant x, Habitant y)
{
if (x.NumTel == y.NumTel)
return 0;
if (x.NumTel < y.NumTel)
return -1;
if (x.NumTel > y.NumTel)
return 1;
return x.ToString().CompareTo(y.ToString());
}
}
private void Sort1_Click(object sender, EventArgs e)
{
if (radioButton1.Checked)
{
Console2.Clear();
HabitantList.Sort(new UserNameComparer());
foreach (Habitant hab in HabitantList)
Console2.Text = Console2.Text + hab.ToString();
}
if (radioButton2.Checked)
{
Console2.Clear();
HabitantList.Sort(new UserTelephonComparer());
foreach (Habitant hab in HabitantList)
Console2.Text = Console2.Text + hab.ToString();
}
}
private void Sort2_Click(object sender, EventArgs e)
{
Habitant[] UsersArray = HabitantList.ToArray();
if (radioButton3.Checked)
{
Console3.Clear();
Array.Sort(UsersArray, new UserNameComparer());
foreach (Habitant hab in UsersArray)
Console3.Text = Console3.Text + hab.ToString();
}
if (radioButton4.Checked)
{
Console3.Clear();
Array.Sort(UsersArray,new UserTelephonComparer());
foreach (Habitant hab in UsersArray)
Console3.Text = Console3.Text + hab.ToString();
}
}
}
}
Account.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace lab4
{
class Account
{
private int roomid;
public int RoomId
{
get { return roomid; }
set { roomid = value; }
}
private int accountid;
public int AccountId
{
get { return accountid; }
set { accountid = value; }
}
private long numaccount;
public long NumAccount
{
get { return numaccount; }
set { numaccount = value; }
}
private string typeaccount;
public string TypeAccount
{
get { return typeaccount; }
set { typeaccount = value; }
}
private int materbegin;
public int MaterBegin
{
get { return materbegin; }
set { materbegin = value; }
}
private int materend;
public int MaterEnd
{
get { return materend; }
set { materend = value; }
}
private int priceatone;
public int PriceAtOne
{
get { return priceatone; }
set { priceatone = value; }
}
private int sumtopayment;
public int SumToPayment
{
get { return sumtopayment; }
set { sumtopayment = value; }
}
public Account(int RId,int AId,int NA, string TA, int MB,int ME,
int PAO,int STP)
{
RoomId = RId;
AccountId = AId;
NumAccount = NA;
TypeAccount = TA;
MaterBegin = MB;
MaterEnd = ME;
PriceAtOne = PAO;
SumToPayment =STP;
}
public override string ToString()
{
return string.Format("ID кімнати - {0:D3},ID рахунку - {1:D3}, номер рахунку - {2}, тип рахунку - {3}, почаковий показник - {4},кінцевий показник - {5},ціна за одиницю - {6},сума до оплати - {7}\r\n\r\n",
RoomId, AccountId, NumAccount, TypeAccount, MaterBegin, MaterEnd, PriceAtOne,SumToPayment);
}
}
}
Habitant.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace lab4
{
class Habitant
{
private int roomid;
public int RoomId
{
get { return roomid; }
set { roomid = value; }
}
private int habitantid;
public int HabitantId
{
get { return habitantid; }
set { habitantid = value; }
}
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
private string lastname;
public string LastName
{
get { return lastname; }
set { lastname = value; }
}
private string patronymic;
public string Patronimic
{
get { return patronymic; }
set { patronymic = value; }
}
private long numtel;
public long NumTel
{
get { return numtel; }
set { numtel = value; }
}
public Habitant(int RId, int HId, string N, string LN, string Pat, long NT)
{
RoomId = RId;
HabitantId = HId;
Name = N;
LastName = LN;
Patronimic = Pat;
NumTel = NT;
}
public override string ToString()
{
return string.Format("ID кімнати - {0:D3},ID жителя - {1},імя - {2}, прізвище - {3}, побатькові - {4}, телефон - {5}\r\n\r\n",
RoomId,HabitantId,Name, LastName, Patronimic, NumTel);
}
}
}
LogIn.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace lab4
{
class LogIn
{
private int roomid;
public int RoomId
{
get { return roomid; }
set { roomid = value; }
}
private string login;
public string Login
{
get { return login; }
set { login = value; }
}
private string pass;
public string Pass
{
get { return pass; }
set { pass = value; }
}
public LogIn(int RId, string log, string pas)
{
RoomId = RId;
Login = log;
Pass = pas;
}
public override string ToString()
{
return string.Format("ID Кімнати - {0:D3}, логін - {1}, пароль - {2},\r\n\r\n",
RoomId, Login, Pass);
}
}
}
Room.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace lab4
{
class Room
{
private int roomid;
public int RoomId
{
get { return roomid; }
set { roomid = value; }
}
private int numroom;
public int NumRoom
{
get { return numroom; }
set { numroom = value; }
}
private int overroom;
public int OverRoom
{
get { return overroom; }
set { overroom = value; }
}
private int amoynthabitant;
public int AmoyntHabitant
{
get { return amoynthabitant; }
set { amoynthabitant = value; }
}
public Room(int RId, int NR, int OR, int AH)
{
RoomId = RId;
NumRoom = NR;
OverRoom = OR;
AmoyntHabitant = AH;
}
public override string ToString()
{
return string.Format("ID кімнати - {0:D3},номер кімнати - {1}, поверх - {2}, кількість жителів - {3}\r\n\r\n",
RoomId,NumRoom, OverRoom, AmoyntHabitant);
}
}
}
Test.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace lab4
{
class Test
{
public List<LogIn> LogIn = new List<LogIn>()
{
new LogIn(001,"archi","123"),
new LogIn(002,"sonik","321"),
new LogIn(003,"Losa","1357"),
new LogIn(004,"Dukuj","246"),
};
public List<Room> Room = new List<Room>()
{
new Room(001,12,1,2),
new Room(002,15,1,1),
new Room(003,26,2,3),
new Room(004,100,4,1),
};
public List<Habitant> Habitant = new List<Habitant>()
{
new Habitant(001,011,"Віктор","Павлик","Романович",80327654822),
new Habitant(001,012,"Ганна","Павлик","Михайлівна",80974563219),
new Habitant(002,021,"Наталя","Лев","Іванівна",80993452167),
new Habitant(003,031,"Катя","Зискун","Степанівна",80964356222),
new Habitant(003,032,"Саша","Музика","Ігорівна",80661111999),
new Habitant(003,033,"Оксана","Лешко","Іванівна",80973435222),
new Habitant(004,041,"Тарас","Шпить","Богданович",80632367854),
};
public List<Account> Account = new List<Account>()
{
new Account(001,123,029911,"Електроенергія",234,321,1,87),
new Account(002,134,019991,"Водопостачання",345,409,2,128),
new Account(003,144,092222,"Опалення",123,234,3,333),
new Account(004,111,099944,"Водопостачання",111,156,2,90),
new Account(002,112,098777,"Опалення",222,435,3,639),
};
}
}
Результати виконання